<?php
/**
 * User: zoudingyong <sheyingtg@qq.com>
 * Date: 2018-7-3 15:33
 */

namespace app\job;

use think\Db;
use think\facade\Log;
use think\queue\Job;

class Push
{

    //参考文档：https://github.com/top-think/think-queue


    /**
     * 投票记录
     * @param Job $job
     * @param $data
     */
    public function addVoteRecord(Job $job, $data)
    {
        try {
//            $Ip2Region = new \Ip2Region();
//            $result = $Ip2Region->btreeSearch($data['ip']);
//            $area = str_replace(['内网IP', '中国', '0', '|'], '', $result['region']);
            $result = getIpInfo($data['ip']);
            $province = $result['region'] ?? '';
            $city = $result['city'] ?? '';

//            $agent = getClientMobileBrand($data['agent']);
            $data['province'] = $province;
            $data['city'] = $city;
            $data['area'] = $province . $city;
//            $data['mobile_brand'] = $agent['mobile_brand'];
//            $data['mobile_ver'] = $agent['mobile_ver'];
            Db::name('tp_vote_record')->insert($data);
            Db::name('tp_vote_item')->where(array('id' => $data['item_id']))->setInc('vcount');


            //任务执行成功后 删除任务
            $job->delete();
        } catch (\Exception $e) {
            Log::error('addVoteRecord_fail_' . $e->getMessage());
            $job->delete();
        }
        //任务轮询4次后删除
        if ($job->attempts() > 3) {
            // 第1种处理方式：重新发布任务,该任务延迟10秒后再执行
            //$job->release(10);
            // 第2种处理方式：原任务的基础上1分钟执行一次并增加尝试次数
            //$job->failed();
            // 第3种处理方式：删除任务
            $job->delete();
        }

    }

    /**
     * 增加抽奖记录
     * @param Job $job
     * @param $data
     */
    public function addLotteryNum(Job $job, $data)
    {
        try {
            Db::name('tp_lottery_num')->insert(['wecha_id' => $data]);


            //任务执行成功后 删除任务
            $job->delete();
        } catch (\Exception $e) {
            Log::error('addLotteryNum_fail_' . $e->getMessage());
            $job->delete();
        }
        //任务轮询4次后删除
        if ($job->attempts() > 3) {
            // 第1种处理方式：重新发布任务,该任务延迟10秒后再执行
            //$job->release(10);
            // 第2种处理方式：原任务的基础上1分钟执行一次并增加尝试次数
            //$job->failed();
            // 第3种处理方式：删除任务
            $job->delete();
        }

    }

    /**
     * 极光推送单个用户
     * @param Job $job
     * @param $data
     */
    public function jPush(Job $job, $data)
    {

        try {
            sendOne($data['alias'], $data['title'], $data['content'], $data['extras']);
            //任务执行成功后 删除任务
            $job->delete();
        } catch (\Exception $e) {
            Log::error('jPush_fail');
            $job->delete();
        }
    }

    /**
     * 微信推送单个用户
     * @param Job $job
     * @param $data
     */
    public function wxPush(Job $job, $data)
    {
        try {
            $config = config('wechat.');
            $template = new \WeChat\Template($config);
            $template->send($data);
            //任务执行成功后 删除任务
            $job->delete();
        } catch (\Exception $e) {
            Log::error('wxpush_fail');
            $job->delete();
        }
        //任务轮询4次后删除
        if ($job->attempts() > 3) {
            // 第1种处理方式：重新发布任务,该任务延迟10秒后再执行
            //$job->release(10);
            // 第2种处理方式：原任务的基础上1分钟执行一次并增加尝试次数
            //$job->failed();
            // 第3种处理方式：删除任务
            $job->delete();
        }

    }

    /**
     * 小程序推送单个用户
     * @param Job $job
     * @param $data
     */
    public function wxSmallPush(Job $job, $data)
    {
        try {
            $config = [
                'appid' => config('wechat.wxapp_appid'),
                'appsecret' => config('wechat.wxapp_appsecret'),
                'mch_id' => config('wechat.wxapp_mch_id'),
                'mch_key' => config('wechat.wxapp_mch_key'),
            ];
            $template = new \WeMini\Template($config);
            $template->send($data);
            //任务执行成功后 删除任务
            $job->delete();
        } catch (\Exception $e) {
            Log::error('wxapppush_fail');
            $job->delete();
        }
        //任务轮询4次后删除
        if ($job->attempts() > 3) {
            // 第1种处理方式：重新发布任务,该任务延迟10秒后再执行
            //$job->release(10);
            // 第2种处理方式：原任务的基础上1分钟执行一次并增加尝试次数
            //$job->failed();
            // 第3种处理方式：删除任务
            $job->delete();
        }

    }

}
